package com.example.sls.service.impl;

import cn.dev33.satoken.stp.StpInterface;
import com.example.sls.dao.user.UsersDao;
import com.example.sls.pojo.logistics.UserManageTable;
import com.example.sls.service.intserfaces.logistics.UserManagementService;
import com.example.sls.utils.LogUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import static com.example.sls.utils.LogUtil.log;

/**
 * 编者：蓝江富
 * 时间：2024/6/16 15:59
 * <h3> 定义权限加载接口实现类，权限和角色数据写死在这里
 */
@Component    // 保证此类被 SpringBoot 扫描，完成 Sa-Token 的自定义权限验证扩展
public class StpInterfaceImpl implements StpInterface {
  @Autowired
  UsersDao usersDao;
  @Autowired
  UserManagementService userManagementService;

  /**
   * 返回一个账号所拥有的权限码集合
   */
  @Override
  public List<String> getPermissionList(Object loginId, String loginType) {
    log(loginId);
    List<String> list = new ArrayList<String>();
    if(Objects.equals(
            usersDao.queryById(Integer.valueOf(loginId.toString())).getUsername(),
            "admin")){
      // 管理员才有的权限
      list.add("*");
    }
    // 默认权限
    list.add("101");
    list.add("user.add");
    list.add("user.update");
    list.add("user.get");
    // list.add("user.delete");
    list.add("art.*");
    return list;
  }

  /**
   * 返回一个账号所拥有的角色标识集合 (权限与角色可分开校验)
   */
  @Override
  public List<String> getRoleList(Object loginId, String loginType) {
    // 本 list 仅做模拟，实际项目中要根据具体业务逻辑来查询角色
    List<String> list = new ArrayList<>();
    // 如果用户被拉黑，分配响应角色表示被拉黑
    list.add("blacklist");
    for (UserManageTable table:userManagementService.getTableData()){
      if (Objects.equals(userManagementService.UT_to_UM(table).getUserId(), Integer.valueOf(loginId.toString())))
        if(table.getBlacklistDays()!=null) {
          if (table.getBlacklistDays() == 0) {
            log(table);
            list.remove("blacklist");
            break;
          }
        }
        else {
          log(table);
          list.remove("blacklist");
          break;
        }
    }
    // 给admin用户添加角色admin
    if(Objects.equals(
            usersDao.queryById(Integer.valueOf(loginId.toString())).getUsername(),
            "admin")) {
      list.add("admin");
      list.add("super-admin");
    }else list.add("user");
    return list;
  }

}

